/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package entidades;
import java.util.ArrayList;
import tipos.CodigoReserva;

/**
 * Classe que representa a entidade reserva de vôo.
 * @author Daniel Saad
 * @author Lucas de Melo
 **/
public class Reserva {
    /**
     * Variável que armazena o código da reserva.
     */
    private String codigoReserva;
    /**
     * Lista de vôos da reserva.
     **/
    private ArrayList<Voo> listaDeVoo = new ArrayList<Voo>();

    /**
     * Contrutor da classe Reserva.
     * @param codigoReservaParam código da reserva a ser atribuído.
     * @exception NullPointerException.
     * @exception IllegalArgumentException.
     */
    public Reserva(final String codigoReservaParam) {
        setReserva(codigoReservaParam);
            listaDeVoo = new ArrayList<Voo>();
    }

    /**
     *Contrutor da classe Reserva.
     */
    public Reserva() {
    }
     /**
     * Método get.
     * @return codigoReserva retorna o código da reserva.
     */
    public final String getReserva() {
        return (this.codigoReserva);
    }
    /**
     * Método set.
     * @param codigoReservaParam atribui o codigo de reserva à reserva.
     * @exception NullPointerException.
     * @exception IllegalArgumentException.
     */
    public final void setReserva(final String codigoReservaParam) {
       CodigoReserva.validar(codigoReservaParam);
       this.codigoReserva = codigoReservaParam;
    }
    /**
     * adiciona um vôo na reserva.
     * @param voo voo a ser adicionado
     */
    public final void adicionaVoo(final Voo voo) {
        listaDeVoo.add(voo);
    }
    /**
     * Recupera o voo de indice index na lista de voos.
     * @param index indice do voo a ser recuperado.
     * @return Voo da lista de voos.
     */
    public final Voo getReservaVoo(final int index) {
        if (listaDeVoo.size() <= index || index < 0) {
            return null;
        }
        return listaDeVoo.get(index);
    }
    /**
     * set o voo de indice index na lista de voos.
     * @param index indice do voo a ser recuperado.
     * @param voo voo recuperado do banco.
     */
    public final void setReservaVoo(final int index, final Voo voo) {
        if (listaDeVoo.size() <= index || index < 0) {
            throw new NullPointerException();
        }
        Voo vooVelho = listaDeVoo.get(index);
        vooVelho.setAeroportoChegada(voo.getAeroportoChegada());
        vooVelho.setAeroportoPartida(voo.getAeroportoPartida());
        vooVelho.setCidadeDestino(voo.getCidadeDestino());
        vooVelho.setCidadeOrigem(voo.getCidadeOrigem());
        vooVelho.setDataChegada(voo.getDataChegada());
        vooVelho.setDataPartida(voo.getDataPartida());
        vooVelho.setHorarioChegada(voo.getHorarioChegada());
        vooVelho.setHorarioPartida(voo.getHorarioPartida());
        vooVelho.setVagas(voo.getVagas());
    }
    /**
     * Recupera a quantidade de voos da reserva.
     * @return quantidade de voos da reserva.
     */
    public final int getNroVoosReserva() {
        return listaDeVoo.size();
    }
}
